// public 修饰符表示类成员是公开的，可以在类的内部和外部访问。
// 默认情况下，类成员是 public 的，即使不显式声明 public。
class Example {
    public name: string;
    constructor(name: string) {
        this.name = name;
    }
}

const example = new Example("example");
console.log(example.name); // 可以访问

// private 修饰符表示类成员是私有的，只能在类的内部访问，不能在类的外部访问。
// 子类也不能访问父类中声明为 private 的成员。
class Example1 {
    private name: string;
    constructor(name: string) {
        this.name = name;
    }

    getName() {
        return this.name;
    }
}

const example1 = new Example1("example");
// console.log(example1.name); // 错误，不能访问
console.log(example1.getName()); // 可以通过类内部的方法访问


// protected 修饰符表示类成员是受保护的，可以在类的内部和子类中访问，但不能在类的外部访问。
// 子类可以访问父类中声明为 protected 的成员。
class Parent {
    protected name: string;
    constructor(name: string) {
        this.name = name;
    }
}

class Child extends Parent {
    getName() {
        return this.name; // 可以在子类中访问
    }
}

const child = new Child("example");
// console.log(child.name); // 错误，不能访问
console.log(child.getName()); // 可以通过子类的方法访问